/**
 * 定义echarts工具模块
 */
(function(window, angular, undefined){
	/**
	* 定义echarts工具模块
	*/
	var echartsUtils = angular.module('echartsUtils', []);
	
	/**
	 * 折线图
	 */
	echartsUtils.directive('categoryCharts',function(){
		return{
			restrict:'AE',              
            	scope :{
            		source:'='
                },
                template:'<div></div>',
                controller: function($scope){
                },
                link:function(scope,element,attr){
                	console.log(scope.source);
                    var chart =  element.find('div')[0];
                    var parent = element['context'];
                    chart.style.width =parent.clientWidth+'px';
                    chart.style.height =parent.clientHeight+'px';
                   
                    var myChart = echarts.init(chart);
                    
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	if(scope.source==null){
	                		return;
	                	}
	                	
	                    var option={};
	                    
	                    var title=null;
	                    if(scope.source.titleTxt!=null){
	                    	 title={
		                        text: scope.source.titleTxt
		                    };
	                    }
	                    var tooltip={
	                       /* trigger: 'none',*/
	                        axisPointer: {
	                            type: 'cross'
	                        }
	                    	,trigger: 'axis'
	                    };
	                    
	                    var legend={
	                       /* data:['邮件营销','联盟广告','视频广告','直接访问','搜索引擎']*/
	                    };
	                    
	                    if(scope.source!=null && scope.source.legendLocation!=null){
	                    	legend['align']=scope.source.legendLocation; // 图例元素 left,bottom,top,right
	                    }else{
	                    	legend.align='left';
	                    }
	                    
	                    if(scope.source.legendShow!=null){
	                    	legend.show=scope.source.legendShow;
	                    }
	                    
	                    if(scope.source.data!=null && scope.source.data.length>0){
	                    	var legendData=[];
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		legendData.push(scope.source.data[k].name);
	                    	}
	                    	legend.data=legendData;
	                    }
	                    
	                    var grid= {
	                        left: '3%',
	                        right: '4%',
	                        bottom: '3%',
	                        containLabel: true
	                    };
	                    
	                    if(scope.source!=null && scope.source.gridtop!=null){
	                    	grid.top=scope.source.gridtop;// 图标位置（顶部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridleft!=null){
	                    	grid.left=scope.source.gridleft;// 图标位置（左侧距离） 百分比 2%
	                    }
	                    
	                    if(scope.source!=null && scope.source.gridright!=null){
	                    	grid.right=scope.source.gridright;// 图标位置（右部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridbottom!=null){
	                    	grid.bottom=scope.source.gridbottom;// 图标位置（底部距离） 百分比 2%
	                    }
	                    
	                    
	                    var toolbox={
	                    	show:false,
	                        feature: {
	                            saveAsImage: {}
	                        }
	                    };
	                    
	                    var xAxis={
	                        type: 'category',
	                        boundaryGap: false,
	                        data: []
	                    };
	                    
	                    if(scope.source.xAxisTilt!=null && 
		                    	(scope.source.xAxisTilt=='true' || scope.source.xAxisTilt==true)){//是否倾斜 ，boolean类型，true,false
		                    	xAxis.axisLabel={
	                			  interval:0,
	                        	  rotate:30
		                    	};
			                };
			                
		                if(scope.source.xAxisData!=null){
	                    	xAxis.data=scope.source.xAxisData;//x轴坐标显示值 数组格式  ['周一','周二','周三','周四','周五','周六','周日']
	                    }
	                    
	                    var yAxis= {
	                        type: 'value'
	                    };
	                    
	                    if(scope.source.yAxisTextFormatter!=null){
	                    	yAxis.axisLabel={};
	                    	yAxis.axisLabel.formatter=scope.source.yAxisTextFormatter;//{value}人格式
	                    }
	                    
	                    var series=[];
	                    
	                    //数据参数数组[{name:'测试',value:[212,213,214]}]
	                    if(scope.source!=null && scope.source.data!=null && scope.source.data.length>0){
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		var item={
	                    				 name:'',
		                                 type:'line',
		                                 stack: '总量',
		                                 data:[]
	                    	        };
	                        	item.name=scope.source.data[k]["name"];
	                        	item.data=scope.source.data[k]["value"];
	                        	series.push(item);
	                    	}
	                    }
	                    
	                    if(title!=null){
	                    	option.title=title;
	                    }
	                    
	                    option.tooltip=tooltip;
	                    option.legend=legend;
	                    option.grid=grid;
	                    option.toolbox=toolbox;
	                    option.xAxis=xAxis;
	                    option.yAxis=yAxis;
	                    option.series=series;
	                    
	                    myChart.setOption(option,true);
	                    myChart.resize();
	               }
              }
           };  
      });
	
	/**
	 * 竖直叠状条形状图
	 */
	echartsUtils.directive('vstackCharts',function(){
		return{
			restrict:'AE',              
            	scope :{
            		source:'='
                },
                template:'<div></div>',
                controller: function($scope){
                },
                link:function(scope,element,attr){
                	console.log(scope.source);
                    var chart =  element.find('div')[0];
                    var parent = element['context'];
                    chart.style.width =parent.clientWidth+'px';
                    chart.style.height =parent.clientHeight+'px';
                   
                    var myChart = echarts.init(chart);
                    
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	if(scope.source==null){
	                		return;
	                	}
	                	
	                    var option={};
	                    
	                    var tooltip={
	                        trigger: 'axis',
	                        axisPointer : {            // 坐标轴指示器，坐标轴触发有效
	                            type : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'
	                        }
	                    };
	                    
	                    var legend={
	 	                    };
	                    
	                    if(scope.source!=null && scope.source.legendLocation!=null){
	                    	legend['align']=scope.source.legendLocation; // 图例元素 left,bottom,top,right
	                    }else{
	                    	legend.align='left';
	                    }
	                    
	                    if(scope.source.legendShow!=null){
	                    	legend.show=scope.source.legendShow;
	                    }
	                    
	                    if(scope.source.data!=null && scope.source.data.length>0){
	                    	var legendData=[];
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		legendData.push(scope.source.data[k].name);
	                    	}
	                    	legend.data=legendData;
	                    }
	                    
	                    var grid= {
	                        left: '3%',
	                        right: '4%',
	                        bottom: '3%',
	                        containLabel: true
	                    };
	                    if(scope.source!=null && scope.source.gridtop!=null){
	                    	grid.top=scope.source.gridtop;// 图标位置（顶部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridleft!=null){
	                    	grid.left=scope.source.gridleft;// 图标位置（左侧距离） 百分比 2%
	                    }
	                    
	                    if(scope.source!=null && scope.source.gridright!=null){
	                    	grid.right=scope.source.gridright;// 图标位置（右部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridbottom!=null){
	                    	grid.bottom=scope.source.gridbottom;// 图标位置（底部距离） 百分比 2%
	                    }
	                    
	                    var xAxis={
	                        type: 'category',
	                       /* boundaryGap: false,*/
	                        data: []
	                    };
		                    
	                    if(scope.source.xAxisTilt!=null && 
	                    	(scope.source.xAxisTilt=='true' || scope.source.xAxisTilt==true)){//是否倾斜 ，boolean类型，true,false
	                    	xAxis.axisLabel={
                			  interval:0,
                        	  rotate:30
	                    	};
			            };
			            
			            if(scope.source.xAxisData!=null){
	                    	xAxis.data=scope.source.xAxisData;//x轴坐标显示值 数组格式  ['周一','周二','周三','周四','周五','周六','周日']
	                    }
			            
			            var yAxis= {
		                        type: 'value'
		                    };
		                    
	                    if(scope.source.yAxisTextFormatter!=null){
	                    	yAxis.axisLabel={};
	                    	yAxis.axisLabel.formatter=scope.source.yAxisTextFormatter;//{value}人格式
	                    }
	                    
	                    var series=[];
	                    
	                  //数据参数数组[{name:'测试',value:[212,213,214]}]
	                    if(scope.source!=null && scope.source.data!=null && scope.source.data.length>0){
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		var item={
	                    				 name:'',
	                    				 type: 'bar',
	     	                             stack: '总量',
	     	                             label: {
	     	                                normal: {
	     	                                    show: true,
	     	                                    position: 'insideTop'
	     	                                }
	     	                             },
		                                 data:[]
	                    	        };
	                        	item.name=scope.source.data[k]["name"];
	                        	item.data=scope.source.data[k]["value"];
	                        	series.push(item);
	                    	}
	                    }

	                    option.tooltip=tooltip;
	                    option.legend=legend;
	                    option.grid=grid;
	                    //option.toolbox=toolbox;
	                    option.xAxis=xAxis;
	                    option.yAxis=yAxis;
	                    option.series=series;
	                    
	                    myChart.setOption(option,true);
	                    myChart.resize();
	               }
              }
           };  
      });
	
	/**
	 * 纵向饼状图
	 */
	echartsUtils.directive('vvbarCharts',function(){
		return{
			restrict:'AE',              
            	scope :{
            		source:'='
                },
                template:'<div></div>',
                controller: function($scope){
                },
                link:function(scope,element,attr){
                	console.log(scope.source);
                    var chart =  element.find('div')[0];
                    var parent = element['context'];
                    chart.style.width =parent.clientWidth+'px';
                    chart.style.height =parent.clientHeight+'px';
                   
                    var myChart = echarts.init(chart);
                    
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	if(scope.source==null){
	                		return;
	                	}
	                	
	                    var option={};
	                    
	                   /* option.backgroundColor='#eee';*/
	                    
	                    var legend={};
	                    if(scope.source.data!=null && scope.source.data.length>0){
	                    	var legendData=[];
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		legendData.push(scope.source.data[k].name);
	                    	}
	                    	legend.data=legendData;
	                    }
	                   
	                    if(scope.source!=null && scope.source.legendLocation!=null){
	                    	legend['align']=scope.source.legendLocation;
	                    	legend[scope.source.legendLocation]=10;// 图例元素 left,bottom,top,right
	                    }else{
	                    	legend.align='left';
	                    	legend.left=10;
	                    }
	                    
	                    var brush={
                	        toolbox: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],
                	        xAxisIndex: 0
                	    };
	                    
	                    var toolbox={
	                    	show:false,
                	        feature: {
                	            magicType: {
                	                type: ['stack', 'tiled']
                	            },
                	            dataView: {}
                	        }
                	    };
	                    
	                    var  tooltip= {};
	                    
	                    var xAxis= {
                	      
                	        name: 'x',
                	        silent: false,
                	        axisLine: {onZero: true},
                	        splitLine: {show: false},
                	        splitArea: {show: false}
                	    };
	                    
	                    if(scope.source.xAxisTilt!=null && 
	                    	(scope.source.xAxisTilt=='true' || scope.source.xAxisTilt==true)){//是否倾斜 ，boolean类型，true,false
	                    	xAxis.axisLabel={
                			  interval:0,
                        	  rotate:30
	                    	};
		                };
	                    
	                    if(scope.source.xAxisData!=null){
	                    	xAxis.data=scope.source.xAxisData;//x轴坐标显示值 数组格式  ["test","test2","test3","test4","test5","test6"]
	                    }
	                    
	                    if(scope.source.xAxisName!=null){
	                    	xAxis.name=scope.source.xAxisName;//x轴坐标轴显示值
	                    }
	                    
	                    
	                    var yAxis={
                	        inverse: true,
                	        splitArea: {show: false}
                	    };
	                    
	                    var grid={
		            	    	top:'15%',
		            	        left: '3%',
		            	        right: '20%',
		            	        bottom: '3%',
		            	        containLabel: true
		            	};
	                    
	                    if(scope.source!=null && scope.source.gridtop!=null){
	                    	grid.top=scope.source.gridtop;// 图标位置（顶部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridleft!=null){
	                    	grid.left=scope.source.gridleft;// 图标位置（左侧距离） 百分比 2%
	                    }
	                    
	                    if(scope.source!=null && scope.source.gridright!=null){
	                    	grid.right=scope.source.gridright;// 图标位置（右部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridbottom!=null){
	                    	grid.bottom=scope.source.gridbottom;// 图标位置（底部距离） 百分比 2%
	                    }
	                    
	                    var visualMap= {
	                    	show:false,
                	        type: 'continuous',
                	        dimension: 1,
                	        text: ['High', 'Low'],
                	        inverse: true,
                	        itemHeight: 200,
                	        calculable: true,
                	        min: -2,
                	        max: 6,
                	        top: 60,
                	        left: 10,
                	        inRange: {
                	            colorLightness: [0.4, 0.8]
                	        },
                	        outOfRange: {
                	            color: '#bbb'
                	        },
                	        controller: {
                	            inRange: {
                	                color: '#2f4554'
                	            }
                	        }
                	    };
	                    
	                    var itemStyle = {
                    	    normal: {
                    	    	label:{
                    	    		show:true,
                    	    		formatter:'{c}'  //参数不定
                    	    	/*	position:'top'*/
                    	    	}
                    	    },
                    	    emphasis: {
                    	        barBorderWidth: 1,
                    	        shadowBlur: 10,
                    	        shadowOffsetX: 0,
                    	        shadowOffsetY: 0,
                    	        shadowColor: 'rgba(0,0,0,0.5)'
                    	    }
                    	};
	                    if(scope.source.dataFormatter!=null){//格式参数参数 {b}/{c} b表示列表名称，c表示参数值
	                    	itemStyle.normal.label.formatter=scope.source.dataFormatter;
	                    }
	                    
	                    var series=[];
	                    //data参数 数组格式[{name:'名称',data:[1,2,3,4]}]
	                    if(scope.source.data!=null && scope.source.data.length>0){
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		var itemValue={
	                    	            type: 'bar',
	                    	            stack: 'one',
	                    	            itemStyle: itemStyle,
	                    	        };
	                    		itemValue.name=scope.source.data[k].name;
	                    		itemValue.data=scope.source.data[k].data;
	                    		series.push(itemValue);
	                    	}
	                    }
	                    
	                    option.legend=legend;
	                    option.brush=brush;
	                    option.toolbox=toolbox;
	                    option.tooltip=tooltip;
	                    option.xAxis=xAxis;
	                    option.yAxis=yAxis;
	                    option.grid=grid;
	                    option.visualMap=visualMap;
	                    option.series=series;
	                    
	                    myChart.setOption(option,true);
	                    myChart.resize();
	               }
              }
           };  
      });
	
	
	
	/**
	 * 纵向饼状图
	 */
	echartsUtils.directive('vbarCharts',function(){
		return{
			restrict:'AE',              
            	scope :{
            		source:'='
                },
                template:'<div></div>',
                controller: function($scope){
                },
                link:function(scope,element,attr){
                	console.log(scope.source);
                    var chart =  element.find('div')[0];
                    var parent = element['context'];
                    chart.style.width =parent.clientWidth+'px';
                    chart.style.height =parent.clientHeight+'px';
                   
                    var myChart = echarts.init(chart);
                    
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	if(scope.source==null){
	                		return;
	                	}
	                    var option={};
	                    
	                    if(scope.source.color!=null){//['#3398DB']数组格式
	                    	option.color=scope.source.color;
	                    }else{
	                    	option.color=['#3398DB'];
	                    }
	                    
	                    var tooltip= {
	            	        trigger: 'axis',
	            	        axisPointer: {
	            	            type: 'shadow'
	            	        }
	            	    };
	                    
	                    var grid={
		            	    	top:'5%',
		            	        left: '3%',
		            	        right: '4%',
		            	        bottom: '15%',
		            	        y2:140,//新参数
		            	        containLabel: true
		            	    };
		                    
	                    if(scope.source!=null && scope.source.gridtop!=null){
	                    	grid.top=scope.source.gridtop;// 图标位置（顶部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridleft!=null){
	                    	grid.left=scope.source.gridleft;// 图标位置（左侧距离） 百分比 2%
	                    }
	                    
	                    if(scope.source!=null && scope.source.gridright!=null){
	                    	grid.right=scope.source.gridright;// 图标位置（右部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridbottom!=null){
	                    	grid.bottom=scope.source.gridbottom;// 图标位置（底部距离） 百分比 2%
	                    }
	                    
	                    var xAxis=[
	                                  {
	                                      type : 'category',
	                                      data : [],
	                                      axisTick: {
	                                          alignWithLabel: true
	                                      }/*,
		                                  axisLabel:{
		                                	  interval:0,
		                                	  rotate:30
		                                  }*/
	                                  }
	                              ];
	                    if(scope.source.xAxisData!=null){
	                    	xAxis[0].data=scope.source.xAxisData;//['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
	                    }
	                    
	                    if(scope.source.xAxisTilt!=null && 
	                    	(scope.source.xAxisTilt=='true' || scope.source.xAxisTilt==true)){//是否倾斜 ，boolean类型，true,false
	                    	xAxis[0].axisLabel={
                			  interval:0,
                        	  rotate:30
	                    	};
	                    };
	                    
	                    var yAxis={
		            	        type: 'value'
		            	    };
	                    
	                    if(scope.source.yAxisTextFormatter!=null){
	                    	yAxis.axisLabel={};
	                    	yAxis.axisLabel.formatter=scope.source.yAxisTextFormatter;
	                    }
	                    
	                    var series=[
	                              {
	                                  name:'',
	                                  type:'bar',
	                                  barWidth: '60%',
	                                  data:[],
	                                  itemStyle : { normal: {label : {show: true, position: 'top'}}}
	                              		
	                              }
	                          ];
	                    
	                    if(scope.source.data!=null && scope.source.data.length>0){//数组格式 [10, 52, 200, 334, 390, 330, 220]
	                    	series[0].data=scope.source.data;
	                    }
	                    
	                    if(scope.source.name!=null){
	                    	series[0].name=scope.source.name;//名称字符串
	                    }
	                    
	                    option.tooltip=tooltip;
	                    option.grid=grid;
	                    option.xAxis=xAxis;
	                    option.yAxis=yAxis;
	                    option.series=series;
	                    
	                    myChart.setOption(option,true);
	                    myChart.resize();
	               }
              }
           };  
      });
	
	
	echartsUtils.directive('hbarCharts',function(){
		return{
			restrict:'AE',              
            	scope :{
            		source:'='
                },
                template:'<div></div>',
                controller: function($scope){
                },
                link:function(scope,element,attr){
                	console.log(scope.source);
                    var chart =  element.find('div')[0];
                    var parent = element['context'];
                    chart.style.width =parent.clientWidth+'px';
                    chart.style.height =parent.clientHeight+'px';
                   
                    var myChart = echarts.init(chart);
                    
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	if(scope.source==null){
	                		return;
	                	}
	                    var option={};
	                    
	                    var title=null;
	                    if(scope.source!=null && scope.source.titleText!=null){
	                    	title={};
	                    	title.text=scope.source.titleText; //参数
	                    }
	                    
	                    var tooltip= {
	            	        trigger: 'axis',
	            	        axisPointer: {
	            	            type: 'shadow'
	            	        }
	            	    };
	                    
	                    var legend={};
	                    
	                    if(scope.source!=null && scope.source.legendData!=null){
	                    	legend.data=scope.source.legendData;// 图例元素  ['2011年', '2012年','2013年']
	                    }
	                    
	                    if(scope.source!=null && scope.source.legendLocation!=null){
	                    	legend[scope.source.legendLocation]= scope.source.legendLocation;// 图例元素 left,bottom,top,right
	                    }else{
	                    	legend.bottom='bottom';
	                    }
	                    
	                    var grid={
	            	    	top:'15%',
	            	        left: '3%',
	            	        right: '10%',
	            	        bottom: '15%',
	            	        containLabel: true
	            	    };
	                    
	                    if(scope.source!=null && scope.source.gridtop!=null){
	                    	grid.top=scope.source.gridtop;// 图标位置（顶部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridleft!=null){
	                    	grid.left=scope.source.gridleft;// 图标位置（左侧距离） 百分比 2%
	                    }
	                    
	                    if(scope.source!=null && scope.source.gridright!=null){
	                    	grid.right=scope.source.gridright;// 图标位置（右部距离）百分比 2%
	                    }
	                    if(scope.source!=null && scope.source.gridbottom!=null){
	                    	grid.bottom=scope.source.gridbottom;// 图标位置（底部距离） 百分比 2%
	                    }
	                    
	                    var xAxis={
	            	        type: 'value',
	            	        boundaryGap: [0, 0.01],
	            	        axisLabel : {
	        	                formatter: '{value}'
	        	            }
	            	    };
	                    
	                    if(scope.source.xAxisTilt!=null && 
	                    	(scope.source.xAxisTilt=='true' || scope.source.xAxisTilt==true)){//是否倾斜 ，boolean类型，true,false
	                    	xAxis.axisLabel={
                			  interval:0,
                        	  rotate:30
	                    	};
	                    };
	                    
	                   
	                	if(scope.source!=null && scope.source.xAxisTextFormatter!=null){
	                		xAxis.axisLabel.formatter=scope.source.xAxisTextFormatter;// x坐标轴刻度格式 {value}人，value表示刻度值
	                    }
	                    
	                    var yAxis={
	            	        type: 'category',
	            	        data: ['']
	            	    };
	                    
	                    var series=[];
	                    var defulatPosition="right";
	                    
	                    if(scope.source!=null && scope.source.rowValuePosition!=null){
	                    	defulatPosition=rowValuePosition;//坐标参数位置（center,insideRight,left,center）
	                    }
	                    
	                    //数据参数数组[{name:'测试',value:122}]
	                    if(scope.source!=null && scope.source.data!=null && scope.source.data.length>0){
	                    	
	                    	for(var k=0;k<scope.source.data.length;k++){
	                    		var item={
	                        			name: '',
	                    	            type: 'bar',
	                    	            label:{
	                    	                normal:{
	                    	                   show:true,
	                    	                   position:defulatPosition
	                    	               }
	                    	            },
	                    	            data: []
	                    	        };
	                        	item.name=scope.source.data[k]["name"];
	                        	item.data.push(scope.source.data[k]["value"]);
	                        	
	                        	series.push(item);
	                    	}
	                    }
	                    
	                    if(title!=null){
	                    	option.title=title;
	                    }
	                    option.tooltip=tooltip;
	                    option.legend=legend;
	                    option.grid=grid;
	                    option.xAxis=xAxis;
	                    option.yAxis=yAxis;
	                    option.series=series;
	                    
	                    myChart.setOption(option,true);
	                    myChart.resize();
	               }
              }
           };  
      });
	
	/**
	 * 饼状图
	 */
	echartsUtils.directive('pieCharts',function(){
		return{
			restrict:'AE',              
            scope :{
	            source:'='
	        },
            template:'<div></div>',
            controller: function($scope){
            },
            link:function(scope,element,attr){
              var chart =  element.find('div')[0];
                var parent = element['context'];
                chart.style.width =parent.clientWidth+'px';
                chart.style.height =parent.clientHeight+'px';
               
                var myChart = echarts.init(chart);
                
                /**
                 * 页面加载时，执行函数
                 */
                createOption();
                
                /**
                 * 监听参数值变化
                 */
                scope.$watch('source',function (newVal, oldVal) {
	  				    if (newVal !== oldVal) {
	  			         
	  				      createOption();
	  				    }
	  				}, true);
                
                /**
                 * 创建option操作
                 * @returns
                 */
                function createOption(){
                	
                	if(scope.source==null){
                		return;
                	}
                	
                	 var titleName=null;
                     var legendLst=null;
                     var data=null;
                     var labelFormatter=null;
                     var legend_orient=null;
                     var legendLocation=null;
                     var color=null;
                     var size=null;
                     var center=null; 
                	
            	  if(scope.source!=null){
	                	if(scope.source.titleName!=null){
	                		titleName=scope.source.titleName;
	                	}
	                	
	                	if(scope.source.data!=null){
	                		data=scope.source.data;
	                	}
	                	
	                	if(scope.source.legendLst!=null){
	                		legendLst=scope.source.legendLst;
	                	}
	                	
	                	if(scope.source.labelFormatter){
	                		labelFormatter=scope.source.labelFormatter;
	                	}
	                	
	                	if(scope.source.legend_orient){
	                		legend_orient=scope.source.legend_orient;
	                	}
	                	
	                	if(scope.source.legendLocation){
	                		legendLocation=scope.source.legendLocation;
	                	}
	                	
	                	if(scope.source.color){
	                		color=scope.source.color;
	                	}
	                	
	                	if(scope.source.center){
	                		center=scope.source.center;
	                	}
	                	
	                	if(scope.source.size){
	                		size=scope.source.size;
	                	}
	                }
                
	  				//1、标题处理默认饼状图文件头
	  				var default_title=null;
	  				if(titleName!=null){
	  					default_title={};
	  					default_title.text="测试数据表头";//标题
	  					//default_title.subtext= '小标题';//小标题
	  					default_title.x='center';//表头放置位置
	  				}
	  				
	  			
	  				//2、默认鼠标放在上面的效果
	  				var default_tooltip = {trigger: 'item' };
	  				default_tooltip.formatter="{b} : {c} \n ({d}%)";//鼠标放置上面的效果(a表示标题头name属性，b表示元素名称，c表示元素值，d表示百分比)
	  				if(labelFormatter!=null){
	  					default_tooltip.formatter=labelFormatter;
	  				}
	  				
	  				//3、默认图例样式
	  				var  default_legend={ };
	  				default_legend.orient='horizontal';//水平或者垂直摆放参数  horizontal 水平，vertical 垂直
	  				if(legendLst!=null){
	  					default_legend.data=legendLst;
	  				}
	  				
	  				if(legend_orient!=null){
	  					default_legend.orient=legend_orient;
	  				}
	  				
	  				if(legendLocation!=null){
	  					default_legend[legendLocation]=legendLocation;
	  					
	  				}else{
	  					default_legend.bottom='bottom';
	  				}
	  				
	  				//4、数据样式
	  				var itemData={};
	  				itemData.type='pie';
	  				if(size!=null){//饼图大小
	  					itemData.radius=size;
	  				}else{
	  					itemData.radius='55%';
	  				}
	  				if(center!=null){//饼图中心位置
	  					itemData.center=center;
	  				}else{
	  					itemData.center=['50%', '40%'];
	  				}
	  				
	  				if(data!=null){
	  					itemData.data=data;
	  				}
	
	  				itemData.itemStyle={};
	  				itemData.itemStyle.normal={};
	  				itemData.itemStyle.normal.label={};
	  				itemData.itemStyle.normal.label.show=true;
	  				if(labelFormatter!=null){
	  					itemData.itemStyle.normal.label.formatter=labelFormatter;
	  				}else{
	  					itemData.itemStyle.normal.label.formatter='{b} : {c} \n ({d}%)';
	  				}
	  				
	  				itemData.itemStyle.normal.labelLine={};
	  				itemData.itemStyle.normal.labelLine.show=true;
	  				itemData.itemStyle.normal.emphasis={};
	  				itemData.itemStyle.normal.emphasis.shadowBlur=10;
	  				itemData.itemStyle.normal.emphasis.shadowOffsetX=0;
	  				itemData.itemStyle.normal.emphasis.shadowColor='rgba(0, 0, 0, 0.5)';
	  				var default_series=[];
	  				default_series.push(itemData);
	  				
	  				//5、数据渲染
	  				var option={};
	  				if(default_title!=null){
	  					option.title=default_title;
	  				}
	  				option.tooltip=default_tooltip;
	  				option.legend=default_legend;
	  				option.series=default_series;
	  				if(color!=null){
	  					option.color=color;
	  				}
	  				myChart.setOption(option);
	  				myChart.setOption(option);
	  				myChart.resize();
	  			}
            }
		};
	});
	
	/**
	 * 码表图
	 */
	echartsUtils.directive('gaugeCharts',function(){
	       return{
	             restrict:'AE',              
	               scope :{
	                   source:'='
	               },
	               template:'<div></div>',
	               controller: function($scope){
	              },
	               link:function(scope,element,attr){
	                   
	                  var chart =  element.find('div')[0];
	                  var parent = element['context'];
	                  chart.style.width =parent.clientWidth+'px';
	                  chart.style.height =parent.clientHeight+'px';
	                   
	                  var myChart = echarts.init(chart);
	                  
	                
	                  /**
	                   * 页面加载时，执行函数
	                   */
	                  createOption();
	                  
	                  /**
	                   * 监听参数值变化
	                   */
	                  scope.$watch('source',function (newVal, oldVal) {
		  				    if (newVal !== oldVal) {
		  				      createOption();
		  				    }
		  				}, true);
	                  
	                  /**
	                   * 创建option操作
	                   * @returns
	                   */
	                  function createOption(){
	                	  
	                	  if(scope.source==null){
		                		return;
		                	}
	                	  var option={};
		                  
		                  var tooltip={};
		                  if(scope.source!=null && scope.source.tooltipFormatter!=null){
		                	  tooltip.formatter=scope.source.tooltipFormatter;
		                  }else{
		                	  tooltip.formatter="{c}%";//数据显示格式 字符串 {b} : {c} \n ({d}%) (a表示标题头name属性，b表示元素名称，c表示元素值)
		                  }
		                  var toolbox={};
		                  toolbox.show=false;
		                  toolbox.feature={};
		                  toolbox.feature.restore={};
		                  toolbox.feature.restore.show=true;
		                  toolbox.feature.saveAsImage={};
		                  toolbox.feature.saveAsImage.show=true;
		                  
		                  var series=[];
		                  
		                  var series_data={};
		                  if(scope.source!=null && scope.source.name!=null){
		                	  series_data.name=scope.source.name; //名称属性
		                  }
		                 
		                  series_data.type='gauge';
		                  series_data.z= 3;
		                  series_data.min= 0;//最小刻度数
		                  if(scope.source!=null && scope.source.min!=null){
		                	  series_data.min=scope.source.min;
		                  }
		                  series_data.max= 100;//最大刻度数
		                  if(scope.source!=null && scope.source.max!=null){
		                	  series_data.max=scope.source.max;
		                  }
		                  series_data.splitNumber= 10;//刻度个数
		                  if(scope.source!=null && scope.source.splitNumber!=null){
		                	  series_data.splitNumber=scope.source.splitNumber;
		                  }
		                  series_data.radius='80%';
		                  
		                  series_data.axisLine={            // 坐标轴线
		                       lineStyle: {       // 属性lineStyle控制线条样式
		  		                   width: 10
		  		               }
		  		          };
		                  series_data.axisTick={            // 坐标轴小标记
		                       length: 15,        // 属性length控制线长
	  		                   lineStyle: {       // 属性lineStyle控制线条样式
	  		                       color: 'auto'
	  		                   }
	  		              };
		                  series_data.splitLine={           // 分隔线
	  		                   length: 20,         // 属性length控制线长
	  		                   lineStyle: {       // 属性lineStyle（详见lineStyle）控制线条样式
	  		                       color: 'auto'
	  		                   }
	  		              };
		                  series_data.title={
	  		                   textStyle: {       // 其余属性默认使用全局文本样式，详见TEXTSTYLE
	  		                       fontWeight: 'bolder',
	  		                       fontSize: 0,
	  		                       fontStyle: 'italic'
	  		                   }
	  		              },
	  		              series_data.detail={
	  		                   textStyle: {       // 其余属性默认使用全局文本样式，详见TEXTSTYLE
	  		                       fontWeight: 'bolder',
	  		                    
	  		                   },
	  		                   formatter:'{value}%' //数据中心格式问题
	  		              };
		                  
		                  if(scope.source!=null && scope.source.dataFormatter){
		                	  series_data.detail.formatter= scope.source.dataFormatter;
		                  }
		                  
		                  series_data.data=[{value: scope.source.data, name: ''}];//数据值参数
		                  
		                  series.push(series_data);
		                  
		                  option.tooltip=tooltip;
		                  option.toolbox=toolbox;
		                  option.series=series;
		                  

		                   myChart.setOption(option,true);
		                   myChart.resize();
	                  }
	                  
	                  
	                }
	           };
		});
	

	/**
	 * 定义echarts工具模块
	 */
	echartsUtils.factory('$echartsUtils', function($rootScope, $http,$gisObject) {
		$echartsUtils = {

			/**
			 * 创建地图
			 * @param elementId 元素的id
			 */
			createMapEcharts:function(elementId,chart,option){
				
				//初始化地图位置
			  
			   if(chart==null){
				   chart=echarts.init($('#'+elementId).get(0));
			   }
			   if(option==null){
				   option = {
			                tooltip: {
//			                    show: false //不显示提示标签
			                    formatter: '{b}', //提示标签格式
			                    backgroundColor:"#ff7f50",//提示标签背景颜色
			                    textStyle:{color:"#fff"} //提示标签字体颜色
			                },
			                series: [{
			                    type: 'map',
			                    mapType: '湖南省',
			                    label: {
			                        normal: {
			                            show: true,//显示省份标签
			                            textStyle:{color:"#c71585"}//省份标签字体颜色
			                        },    
			                        emphasis: {//对应的鼠标悬浮效果
			                            show: true,
			                            textStyle:{color:"#800080"}
			                        } 
			                    },
			                    itemStyle: {
			                        normal: {
			                            borderWidth: .5,//区域边框宽度
			                            borderColor: '#009fe8',//区域边框颜色
			                            areaColor:"#ffefd5",//区域颜色
			                        },
			                        emphasis: {
			                            borderWidth: .5,
			                            borderColor: '#4b0082',
			                            areaColor:"#ffdead",
			                        }
			                    }/*,
			                    data:[
			                        {name:'长沙市', selected:true}//长沙市为选中状态
			                    ]*/
			                }],
			            };
			   }
			   
			   chart.setOption(option,true);
			   
			   //点击事件执行函数
			   chart.on('click', function(e) {
		        	if (e.seriesType != 'map') {
		        		return;
		        	}
		        	
		        	 option = {
				                tooltip: {
//				                    show: false //不显示提示标签
				                    formatter: '{b}', //提示标签格式
				                    backgroundColor:"#ff7f50",//提示标签背景颜色
				                    textStyle:{color:"#fff"} //提示标签字体颜色
				                },
				                series: [{
				                    type: 'map',
				                    mapType: e.name,
				                    label: {
				                        normal: {
				                            show: true,//显示省份标签
				                            textStyle:{color:"#c71585"}//省份标签字体颜色
				                        },    
				                        emphasis: {//对应的鼠标悬浮效果
				                            show: true,
				                            textStyle:{color:"#800080"}
				                        } 
				                    },
				                    itemStyle: {
				                        normal: {
				                            borderWidth: .5,//区域边框宽度
				                            borderColor: '#009fe8',//区域边框颜色
				                            areaColor:"#ffefd5",//区域颜色
				                        },
				                        emphasis: {
				                            borderWidth: .5,
				                            borderColor: '#4b0082',
				                            areaColor:"#ffdead",
				                        }
				                    }/*,
				                    data:[
				                        {name:'长沙市', selected:true}//长沙市为选中状态
				                    ]*/
				                }],
				            };
		        	 chart.setOption(option,true);
		        	 
		        });
			   
			   return chart;
				
			},
				
			test:function(){
				
			},
			test2:function(){
							
			}
			
		};
		for(f in $echartsUtils){
			$rootScope[f] = $echartsUtils[f];
		}
		return $echartsUtils;
	});
}(window, angular));